Incremental generation of polynomials for decoding reed-solomon codes

ABSTRACT

An error locator polynomial is incrementally generated by flipping a bit pattern Y i  at a symbol X i  an initial dataword to obtain a first test error pattern. A bit pattern Y j  at a symbol X j  within the first test error pattern is flipped to obtain a second test error pattern, wherein i≠j.

CROSS REFERENCE TO OTHER APPLICATIONS

This application is a continuation of co-pending U.S. patent application Ser. No. 11/433,645 (Attorney Docket No. LINKP007), entitled INCREMENTAL GENERATION OF POLYNOMIALS FOR DECODING REED-SOLOMON CODES filed May 11, 2006 which is incorporated herein by reference for all purposes.

BACKGROUND OF THE INVENTION

Chase decoding is a soft-decision decoding technique for algebraic codes where an efficient bounded-distance decoder is available. The straightforward approach to perform Chase decoding is to repeatedly flip test error patterns and perform a full Berlekamp-Massey process for each test error pattern. From a computational point of view, this has a complexity of O(nd), where n denotes the code length and d denotes the minimum Hamming distance. In hardware implementations (e.g., implemented as an Application Specific Integrated Circuit (ASIC) or Field Programmable Gate Array (FPGA)) and software implementations (e.g., a computer program) performing Chase decoding in a straightforward manner requires increasing amounts of time as the code length and/or the minimum Hamming distance increase. Techniques to perform Chase decoding in less time would be useful.

BRIEF DESCRIPTION OF THE DRAWINGS

Various embodiments of the invention are disclosed in the following detailed description and the accompanying drawings.

FIG. 1 is a diagram illustrating an embodiment of a Reed-Solomon decoder.

FIG. 2 is a diagram illustrating an embodiment of test error patterns associated with a Chase decoding process.

FIG. 3 is a flowchart illustrating an embodiment of a process for incrementally generating error locator polynomials.

FIG. 4 is a flowchart illustrating an embodiment of a process for initialization associated with incrementally generating error locator polynomials.

FIG. 5 is a flowchart illustrating an embodiment of a process for performing error correction using polynomials selected from an incrementally generated group.

DETAILED DESCRIPTION

The invention can be implemented in numerous ways, including as a process, an apparatus, a system, a composition of matter, a computer readable medium such as a computer readable storage medium or a computer network wherein program instructions are sent over optical or electronic communication links. In this specification, these implementations, or any other form that the invention may take, may be referred to as techniques. A component such as a processor or a memory described as being configured to perform a task includes both a general component that is temporarily configured to perform the task at a given time or a specific component that is manufactured to perform the task. In general, the order of the steps of disclosed processes may be altered within the scope of the invention.

A detailed description of one or more embodiments of the invention is provided below along with accompanying figures that illustrate the principles of the invention. The invention is described in connection with such embodiments, but the invention is not limited to any embodiment. The scope of the invention is limited only by the claims and the invention encompasses numerous alternatives, modifications and equivalents. Numerous specific details are set forth in the following description in order to provide a thorough understanding of the invention. These details are provided for the purpose of example and the invention may be practiced according to the claims without some or all of these specific details. For the purpose of clarity, technical material that is known in the technical fields related to the invention has not been described in detail so that the invention is not unnecessarily obscured.

A Chase decoder that generates a new error locator polynomial using interpolation and linear feedback shift register techniques is disclosed. In some embodiments, after performing a full Berlekamp-Massey process once, a new error locator polynomial is obtained by flipping a test error pattern and employing an interpolation-based linear feedback shift register, rather than repeatedly going through the full Berlekamp-Massey process which takes d−1 iterations, where d denotes the minimum Hamming distance. In some embodiments, there are multiple interpolation-based linear feedback shift registers operating in parallel. From a computational point of view, this requires complexity O(n) in attempting to determine a codeword, compared to O(nd) when straightforwardly utilizing the Berlekamp-Massey process, where n denotes the code length and d denotes the minimum Hamming distance.

Although the embodiments described herein discuss a Chase decoder to process Reed-Solomon codes, the techniques described may be modified as appropriate for other codes. In some embodiments, other codes such as Bose, Ray-Chaudhuri, Hocquenghem (BCH) codes and generalized Reed-Solomon codes are processed.

FIG. 1 is a diagram illustrating an embodiment of a Reed-Solomon decoder. In the example shown, for a Reed-Solomon C(n,k) code over a Galois Field of GF(q), a k-symbol data word D

[D_(k−1), D_(k−2), . . . , D₁, D₀] is encoded to produce an n-symbol codeword C

[C_(n−1), C_(n−2), . . . , C₁, C₀]. Another way of expressing this is that a data word polynomial D(x)=D_(k−1)x^(k−1)+D_(k−2)x^(k−2)+ . . . +D₁x¹+D₀ is encoded to produce a codeword polynomial C(x)=C_(n−1)x^(n−1)+C_(n−2)x^(n−2)+ . . . +C₁x+C₀, by means of a generator polynomial

${{G(x)}\overset{\Delta}{=}{\prod\limits_{i = 0}^{n - k - 1}\; \left( {x - \alpha^{m_{0} + i}} \right)}},$

where m₀ is typically 0 or 1 and α is a primitive element of GF(q). As used herein, vector A=[A₀, A₁, A₂, . . . , A_(l)] and its polynomial representation A(x)=A₀+A₁x+A₂x²+ . . . +A_(l)x^(l) may be used interchangeably. In some embodiments, a polynomial of degree less than n is a codeword polynomial if and only if it is a multiple of the generator polynomial, G(x). A codeword polynomial C(x) satisfies

C(α^(m) ⁰ ^(+i))=0, i=0, 1, 2, . . . , n−k−1.

The minimum Hamming distance of the code is d_(min)=n−k+1, a feature known as maximally-distance-separable. For purposes of illustration, the examples described herein consider the specific case where q=2^(m) (i.e., GF(2^(m))), instead of the general case where GF(p^(m)), and m₀=1. In other words, the code illustrated in this embodiment is defined such that n−k=2t (where t is the error-correction capability). Although examples described herein consider the above specific case, in some embodiments, other cases may be used.

A systematic encoding generates a codeword that is comprised of the data word and parity-check symbols. To generate a codeword, let Ψ(x)

Ψ_(2t−1)x^(2t−1)+Ψ_(2t−2)x^(2t−2)+ . . . +Ψ₁x+Ψ₀ denote the remainder when x^(2t)D(x) is divided by G(x). The polynomial x^(2t)D(x)−Ψ(x) is then a multiple of G(x) and is denoted as a systematic codeword polynomial; alternatively, C=[D_(k−1), D_(k−2), . . . , D₀, −Ψ_(2t−1), −Ψ_(2t−2), . . . , −Ψ₀].

Let C(x) denote the transmitted codeword polynomial and R(x) the received word polynomial after appropriate channel quantization. The received word polynomial, R(x), is passed to decoder 100 and may include some errors. The decoding objective is to determine the error polynomial E(x) such that C(x)=R(x)−E(x). That is, decoder 100 attempts to produce the original codeword, C(x), using the received polynomial, R(x).

Syndrome generator 102 generates syndrome values using the received polynomial, R(x). Syndrome values are computed using:

S _(i) =R(α^(i+1))=C(α^(i+1))+E(α^(i+1))=E(α^(i+1)), i=0, 1, 2, . . . , 2t−1.

If all 2t syndrome values are zero, then R(x) is a codeword and it may be assumed that C(x)=R(x), i.e., no errors have occurred. Otherwise, the decoder attempts to solve the following equation system:

$\quad\left\{ \begin{matrix} {{{Y_{1}X_{1}^{1}} + {Y_{2}X_{2}^{1}} + \ldots + {Y_{e}X_{e}^{1}}} = S_{0}} \\ {{{Y_{1}X_{1}^{2}} + {Y_{2}X_{2}^{2}} + \ldots + {Y_{e}X_{e}^{2}}} = S_{1}} \\ \vdots \\ {{{Y_{1}X_{1}^{2\; t}} + {Y_{2}X_{2}^{2\; t}} + \ldots + {Y_{e}X_{e}^{2\; t}}} = S_{{2\; t} - 1}} \end{matrix} \right.$

where e denotes the (unknown) number of errors, X₁, X₂, . . . , X_(e) denote the error locations, and Y₁, Y₂, . . . , Y_(e) denote the corresponding error magnitudes.

The syndrome polynomial generated by syndrome generator 102 is defined to be:

S(x)

S ₀ +S ₁ x+S ₂ x ² + . . . +S _(2t−1) x ^(2t−1).  (1)

The syndromes (i.e., the coefficients of the syndrome polynomial) are passed from syndrome generator 102 to error polynomial generator 104. Error polynomial generator 104 generates the error locator polynomial, Λ(x), which is defined to be:

$\begin{matrix} {{\Lambda (x)}\overset{\Delta}{=}{{\prod\limits_{i = 1}^{e}\left( {1 - {X_{i}x}} \right)} = {1 + {\Lambda_{1}x} + {\Lambda_{2}x^{2}} + \ldots + {\Lambda_{e}{x^{e}.}}}}} & (2) \end{matrix}$

Additional polynomials besides the error locator polynomial may be generated by error polynomial generator 104.

The error evaluator polynomial is defined to be:

$\begin{matrix} {{\Omega (x)}\overset{\Delta}{=}{{\sum\limits_{i = 1}^{e}\; {Y_{i}X_{i}{\prod\limits_{{j = 1},{j \neq i}}^{e}\left( {1 - {X_{j}x}} \right)}}} = {\Omega_{0} + {\Omega_{1}x} + {\Omega_{2}x^{2}} + \ldots + {\Omega_{e - 1}{x^{e - 1}.}}}}} & (3) \end{matrix}$

The three polynomials satisfy the following equation:

Ω(x)=Λ(x)S(x)(mod x ^(2t)).  (4)

The Berlekamp-Massey method can be used to solve equation 4, given that the number of errors e does not exceed the error-correction capability t. The essence of the Berlekamp-Massey method is to determine a minimum-length linear feedback shift register (LFSR) that generates the syndrome sequence S₀, S₁, S₂, . . . , S_(2t−1), where an LFSR of length L, a₀, a₁, a₂, . . . , a_(L), generates the sequence S₀, S₁, S₂, . . . , S_(2t−1) if

$\begin{matrix} {{{\sum\limits_{j = 0}^{L}{S_{i - j}a_{j}}} = 0},\mspace{14mu} {i = L},{L + 1},\ldots \mspace{14mu},{{2\; t} - 1.}} & (5) \end{matrix}$

More specifically, the Berlekamp-Massey method produces two polynomials, Λ(x) and B(x) as characterized by the following lemma.

Lemma 1 (i). Λ(x) is a minimum-length LFSR that generates the sequence S₀, S₁, S₂, . . . , S_(2t−1). B(x) is a minimum-length LFSR that generates the sequence S₀, S₁, S₂, . . . , S_(2t−2) but not S₀, S₁, S₂, . . . , S_(2t−1).

(ii). The degrees of Λ(x) and B(x), denoted by L_(Λ) and L_(B) respectively, satisfy

L _(Λ) +L _(B)=2t.  (6)

(iii). The polynomials Λ(x) and B(x) are relatively prime, i.e., the two do not share a common factor.

It is worth mentioning that there may exist multiple minimum-length LFSRs that generate the sequence S₀, S₁, S₂, . . . , S_(2t−1), and Λ(x) obtained from the Berlekamp-Massy process is one of them when non-unique. Note also that “a polynomial a(x) generating the sequence S₀, S₁, S₂, . . . , S_(2t−1)” is equivalent to “the degree of the polynomial a(x)S(x)(mod x^(2t)) less than that of a(x).”

Note in this presentation an error locator polynomial does not have to be normalized. For notational convenience, the following is defined

Θ(x)

B(x)S(x)(mod x ^(2t−1)).  (7)

Note that the above definition differs slightly from that of Ω(x) which takes mod x^(2t), due to the fact that Λ(x) generates S₀, S₁, S₂, . . . , S_(2t−1); whereas B(x) generates only S₀, S₁, S₂, . . . , S_(2t−2).

The error locator polynomial, Λ(x), is passed from error polynomial generator 104 to error locator 106. Error locations may correspond to the roots, X_(i), of the error locator polynomial, Λ(x). Error locator 106 may use a Chien search method to determine error locations.

Error evaluator 108 determines the error magnitudes, Y_(i). Error locations are received from error locator 106 and are used to determine the error magnitudes. Some Reed Solomon decoders use the Forney formula to determine the error magnitudes. Other error magnitude formulas besides the Forney formula may be determined and used to generate the error magnitudes. For example, error magnitudes formulas that allow reduced hardware or reduced clock cycles may be preferred. In some embodiments, the error magnitude formula may allow improvements in other blocks besides the error evaluator. For example, using some error magnitude formulas, error polynomial generator 104 or error locator 106 may also be improved.

Error corrector 110 uses the error magnitudes and error locations to correct the received polynomial, R(x). If the error correction capability of the code is able to correct for the received errors, E(x), then the output of error corrector 110 is C(x), the codeword originally transmitted.

Decoder 100 can be used in a variety of applications. In some embodiments, decoder 100 is used in a storage system, such as a disk drive system. Data written to a storage medium is encoded (e.g., using a Reed-Solomon code) and the stored data is decoded (e.g., using the incremental polynomial generation technique described herein) when read back. Other applications of decoder 100, and thus the incremental polynomial generation technique, include compact disk players, digital televisions, wireless communication (e.g., satellites), and wired communication (e.g., Asymmetric Digital Subscriber Line (ADSL) modems).

FIG. 2 is a diagram illustrating an embodiment of test error patterns associated with a Chase decoding process. In the example shown, τ=3, where τ is the number of symbols identified to have an error by a soft output Viterbi decoder. In a straightforward Chase decoding process, all combinations of a set of τ (τ≦t) symbol error patterns are flipped, each time applying bounded-distance decoding to that particular combination of flipped/non-flipped symbol error patterns. The most likely codeword, if any, is selected from the decoded candidate codewords.

In this section, an incremental generation technique is described to determine valid error locator polynomials. In some embodiments, the incremental generation technique is performed in one-pass. By one-pass, it is meant that one iteration can be performed in a constant number of steps or amount of time, independent of code length, n, as well as the error-correction capability, t, when the process is performed in parallel.

The diagram shown illustrates one embodiment of a flipping sequence. In discussing how to incrementally generate error locator polynomials, processing with respect to one branch is described and it is to be understood that the operations performed in one branch are repeated for other branches. To obtain test error pattern 208, an initial dataword 200 is flipped at bit pattern Y₁ at symbol X₁. To obtain test error pattern 209 from test error pattern 208, bit pattern Y₂ at symbol X₂ is flipped.

Error locator polynomials in this example are first incrementally generated for the first branch (202), where incrementally generating includes generating based on a prior version or iteration of that polynomial. For example, an error locator polynomial is generated for test error pattern 208 based on the error locator polynomial associated with initial dataword 200. The error locator polynomial for test error pattern 209 is based on that for 208 and similarly the error locator polynomial for test error pattern 210 is based on that for 209. The process is repeated for the second branch (204) and the third branch (206). At the start of each branch the process is reinitialized using data associated with initial dataword 200.

A tree structure (identical or similar to that shown in this figure) may be a memory efficient way of incrementally generating error locator polynomials. By using a tree structure, it may not be necessary to store all error locator polynomials generated as the tree is traversed. In some embodiments, only the best (or one of the best) error locator polynomials generated is used in subsequent processing, such as a Chien search to find the error locations using the best error locator polynomial, error correction, etc. Thus, it may be sufficient to store the current best error locator polynomial (to be used subsequently) and the immediately prior error locator polynomial (used to incrementally generate the current error locator polynomial). In some embodiments, a different sequence of test patterns (and correspondingly a difference sequence of generating error locator polynomials) is used compared to that illustrated. For example, it is not necessary to use a tree structure or a different tree structure is used.

Let (X₁,Y₁), (X₂,Y₂), . . . , (X_(r),Y_(r)), where X indicates the symbol location and Y_(i) indicates the corresponding bit pattern associated with that symbol location, be the sequence to be sequentially flipped. Cumulative sets σ_(i), i=0, 1, 2, . . . , τ, are defined such that

σ_(i)={(X ₁ ,Y ₁), (X ₂ ,Y ₂), . . . , (X _(i) ,Y _(i))}.  (8)

For example, the first branch (202) of test error patterns can be generated by sequentially flipping as described. The second and third branches (204 and 206) are generated slightly differently. Let S_(j) ^((σ) ^(i) ⁾, j=0, 1, 2, . . . , 2t−1, be the variant syndrome associated with flipping pattern set σ_(i).

$\begin{matrix} {S_{j}^{(\sigma_{i})} = {{S_{j} + {\sum\limits_{l = 1}^{i}{Y_{l}X_{l}^{j + 1}}}} = {S_{j}^{(\sigma_{i - 1})} + {Y_{i}{X_{i}^{j + 1}.}}}}} & (9) \end{matrix}$

Let Λ^((σ) ⁰ ⁾(x) and B^((σ) ⁰ ⁾(x) denote the polynomials Λ(x) and B(x), respectively, obtained from the Berlekamp-Massey process using an initial syndrome.

Some optimization problems associated with incrementally generating error locator polynomials for the test error patterns are presented below. Discussion of the optimization problems follows.

A[σ_(i)]: Determine a minimum-length LFSR Λ^((σ) ^(i) ⁾(x), subject to (i) Λ₀ ^((σ) ⁰ ⁾≠0 and Λ^((σ) ^(i) ⁾(x) generates the sequence S₀, S₁, S₂, . . . , S_(2t−1); (ii) Λ^((σ) ^(i) ⁾(x) contains roots X₁ ⁻¹, X₂ ⁻¹, . . . , X_(i) ⁻¹; and (iii) {circumflex over (Ω)}^((σ) ^(i) ⁾(x)

S^((σ) ^(i) ⁾(x)Λ^((σ) ^(i) ⁾(x)(mod x^(2t)) contains roots X₁ ⁻¹, X₂ ⁻¹, . . . , X^(i−1).

B[σ_(i)]: Determine a minimum-length LFSR B^((σ) ^(i) ⁾(x), subject to (i) B^((σ) ^(i) ⁾(x) generates the sequence S₀, S₁, S₂, . . . , S_(2t−2) but not S₀, S₁, S₂, . . . , S_(2t−1); B^((σ) ^(i) ⁾(x) contains roots X₁ ⁻¹, X₂ ⁻¹, . . . , X_(i) ⁻¹; and (iii) {circumflex over (Θ)}^((σ) ^(i) ⁾(x)

S^((σ) ^(i) ⁾(x)B^((σ) ^(i) ⁾(x)(mod x^(2t)) contains roots X₁ ⁻¹, X₂ ⁻¹, . . . , X_(i) ⁻¹.

Note that {circumflex over (Ω)} and {circumflex over (Θ)} are variants of Ω and Θ, respectively. The second criterion, (ii), for A[σ_(i)]; and B[σ_(i)] suggest cumulative or incremental interpolation and is discussed in further detail below. The following lemma discusses some properties associated with cumulative interpolation.

Lemma 2 Let Λ^((σ) ^(i) ⁾(x) and B^((σ) ^(i) ⁾(x) (i<t) be a solution of the optimization problems A[σ_(i)] and B[σ_(i)], respectively.

(i). Let Λ^((σ) ^(i+1) ⁾(x) be a minimum-length LFSR in the form of

Λ^((σ) ^(i+1) ⁾(x)=(1+xa(x))·Λ^((σ) ^(i) ⁾(x)+b(x)·xB ^((σ) ^(i) ⁾(x)  (10)

with the polynomials a(x) and b(x) selected so that both Λ^((σ) ^(i+1) ⁾(x) and {circumflex over (Ω)}^((σ) ^(i+1) ⁾(x) contain the root X_(i+1) ⁻¹. Then, Λ^((σ) ^(i+1) ⁾(x) is a solution of the optimization problem A[σ_(i+1)].

(ii). Let B^((σ) ^(i+1) ⁾(x) be a minimum-length LFSR in the form of

B ^((σ) ^(i+1) ⁾(x)=a′(x)·Λ^((σ) ^(i) ⁾(x)+(1+xb′(x))B ^((σ) ^(i) ⁾(x)  (11)

with the polynomials a′(x) and b′(x) selected so that both B^((σ) ^(i+1) ⁾(x) and {circumflex over (Θ)}^((σ) ^(i+1) ⁾(x) contain the root X_(i+1) ⁻¹. Then, B^((σ) ^(i+1) ⁾(x) is a solution of the optimization problem B[σ_(i+1)].

Proof of (i) for Lemma 2. Λ^((σ) ^(i+1) ⁾(x) satisfies criterion (ii) of A[σ_(i+1)]. The conclusion that Λ^((σ) ^(i+1) ⁾(x) generates S₀, S₁, S₂, . . . , S_(2t−1) results from the fact that both Λ^((σ) ^(i) ⁾(x) and xB^((σ) ^(i) ⁾(x) generate S₀, S₁, S₂, . . . , S_(2t−1) (i.e., criterion (i) of A[σ_(i+1)] is satisfied). Criterion (iii) of A[σ_(i+1)] is demonstrated. It is noted that

$\begin{matrix} {{{\hat{\Omega}}^{(\sigma_{i + 1})}(x)} = {{S^{(\sigma_{i + 1})}(x)}{\Lambda^{(\sigma_{i + 1})}(x)}\left( {{mod}\mspace{14mu} x^{2t}} \right)}} \\ {= {\left( {{S^{(\sigma_{i})}(x)} + {Y_{i + 1}X_{i + 1}{\sum\limits_{j = 0}^{{2t} - 1}{X_{i + 1}^{j}x^{j}}}}} \right){\Lambda^{(\sigma_{i + 1})}(x)}\left( {{mod}\mspace{11mu} x^{2t}} \right)}} \\ {{\left. {= {{{S^{(\sigma_{i})}(x)}{\left( {1 + {x\; {a(x)}}} \right) \cdot {\Lambda^{(\sigma_{i})}(x)}}} + {{{b(x)} \cdot x}\; {B^{(\sigma_{i})}(x)}}}} \right)\left( {{mod}\mspace{11mu} x^{2t}} \right)} +} \\ {{Y_{i + 1}X_{i + 1}\frac{1 - {X_{i + 1}^{2t}x^{2t}}}{1 - {X_{i + 1}x}}{\Lambda^{(\sigma_{i + 1})}(x)}\left( {{mod}\mspace{11mu} x^{2t}} \right)}} \\ {= {{\left( {1 + {x\; {a(x)}}} \right) \cdot {{\hat{\Omega}}^{(\sigma_{i})}(x)}} + {{{b(x)} \cdot x}\; {{\hat{\Theta}}^{(\sigma_{i})}(x)}} +}} \\ {{Y_{i + 1}X_{i + 1}\frac{\Lambda^{(\sigma_{i + 1})}(x)}{1 - {X_{i + 1}x}}}} \end{matrix}$

where in the last equality, the first two terms are due to criterion (i) of A[σ_(i)] for Λ^((σ) ^(i) ⁾(x) and criterion (i) of B[σ_(i)] for B^((σ) ^(i) ⁾(x), so that the degrees of {circumflex over (Ω)}^((σ) ^(i) ⁾(x) and {circumflex over (Θ)}^((σ) ^(i) ⁾(x) are less than that of Λ^((σ) ^(i) ⁾(x) and B^((σ) ^(i) ⁾(x), respectively. The last term is due to the assumption that 1−X_(i+1)x is divisible by Λ^((σ) ^(i+1) ⁾(x). Thus, Λ^((σ) ^(i+1) ⁾(x) also contains the roots, X₁ ⁻¹, X₂ ⁻¹, . . . , X_(i) ⁻¹ (i.e., it satisfies criterion (iii) of A[σ_(i+1)]).

The conclusion that B^((σ) _(i+1) ⁾(x) generates S₀, S₁, S₂, . . . , S_(2t−2) but not S₀, S₁, S₂, . . . , S_(2t−1) results from the fact that B^((σ) ^(i) ⁾(x), a component of B^((σ) ^(i+1) ⁾(x), generates only S₀, S₁, S₂, . . . , S_(2t−2). Proof of the remainder of Lemma 2 follows that of part (i).

The following lemma in turn discusses the properness of the proposed problem formulation.

Lemma 3 If (X₁,Y₁), (X₂,Y₂), . . . , (X_(i),Y_(i)) (i≦t) are true error patterns out of t+i symbol errors, then the true error locator polynomial is the unique solution (upon normalization) of the proposed optimization problem, A[σ_(i)].

Proof: Let {tilde over (X)}₁, {tilde over (X)}₂, . . . , {tilde over (X)}_(i) be associated with the remaining erroneous locations in addition to X₁, X₂, . . . , X_(i). Then the error locator polynomial can be expressed as

${\Lambda^{*}(x)} = {\prod\limits_{j = 1}^{i}{\left( {1 - {X_{j}x}} \right){\prod\limits_{j = 1}^{t}{\left( {1 - {{\overset{\sim}{X}}_{j}x}} \right).}}}}$

The genuine error locator polynomial Λ*(x) satisfies the criteria (i) and (ii) of A[σ_(i)]. It is observed that

$\begin{matrix} {{{\hat{\Omega}}^{*}(x)} = {{\Lambda^{*}(x)}{S^{(\sigma_{i})}(x)}\left( {{mod}\; x^{2\; t}} \right)}} \\ {= {\prod\limits_{j = 1}^{i}{\left( {1 - {X_{j}x}} \right)\left( {\prod\limits_{j = 1}^{t}\; {\left( {1 - {{\overset{\sim}{X}}_{j}x}} \right){S^{(\sigma_{i})}(x)}\left( {{mod}\; x^{2\; t}} \right)}} \right)}}} \end{matrix}$

Note in the last equality, the second term is of degree t−1. Therefore {circumflex over (Ω)}*(x) contains the roots X₁ ⁻¹, X₂ ⁻¹, . . . , X_(i) ⁻¹ (i.e., Λ*(x) also satisfies criterion (iii) of A[σ_(i)]).

It is next shown by contradiction that Λ*(x) is the unique solution of the optimization problem A[σ_(i)]. Otherwise, let the polynomial Λ^((σ) ^(i) ⁾(x) be a solution of the optimization problem A[σ_(i)]. By assumption, Λ^((σ) ^(i) ⁾(x) has a length less than or equal to t+i and Λ^((σ) ^(i) ⁾(x)≠Λ*(x). According to criterion (i) of A[σ_(i)], Ω(x)=Λ^((σ) ^(i) ⁾(x)S(x)(mod x^(2t)) has a degree less than t+i. It is observed that

$\begin{matrix} \begin{matrix} {{\Omega (x)} = {{\Lambda^{(\sigma_{i})}(x)}{S(x)}\left( {{mod}\; x^{2\; t}} \right)}} \\ {= {{\Lambda^{(\sigma_{i})}(x)}\left( {{S^{(\sigma_{i})}(x)} + {\sum\limits_{l = 1}^{i}{\sum\limits_{j = 0}^{{2\; t} - 1}{Y_{l}X_{l}^{j + 1}x^{j}}}}} \right)\left( {{mod}\; x^{2\; t}} \right)}} \\ {= {\left( {{\Lambda^{(\sigma_{i})}(x)}{S^{(\sigma_{i})}(x)}\left( {{mod}\; x^{2\; t}} \right)} \right) +}} \\ {\left( {{\Lambda^{(\sigma_{i})}(x)}{\sum\limits_{l = 1}^{i}{Y_{l}X_{l}\frac{1 - {X_{l}^{2\; t}x^{2\; t}}}{1 - {X_{l}x}}\left( {{mod}\; x^{2\; t}} \right)}}} \right)} \end{matrix} & (12) \\ {\mspace{50mu} {= {{{\hat{\Omega}}^{(\sigma_{i})}(x)} + {\sum\limits_{l = 1}^{i}{Y_{l}X_{l}{\frac{\Lambda^{(\sigma_{i})}(x)}{1 - {X_{l}x}}.}}}}}} & (13) \end{matrix}$

In the last equality, the second term has a degree less than that of Λ^((σ) ^(i) ⁾(x). Thus, the degree of the first term of {circumflex over (Ω)}(x) can not exceed that of Λ^((σ) ^(i) ⁾(x).

A new polynomial

${{\overset{\sim}{\Lambda}}^{(\sigma_{i})}(x)}\overset{\Delta}{=}\frac{\Lambda^{(\sigma_{i})}(x)}{\prod\limits_{l = 1}^{i}\left( {1 - {X_{l}x}} \right)}$

is defined. By the definition of {circumflex over (Ω)}^((σ) ^(i) ⁾(x)

Λ^((σ) ^(i) ⁾(x)S ^((σ) ^(i) ⁾(x)={circumflex over (Ω)}^((σ) ^(i) ⁾(x)+x ^(2t) f(x).

where f(x) is a polynomial. Since both Λ^((σ) ^(i) ⁾(x) and {circumflex over (Ω)}^((σ) ^(i) ⁾(x) divide the term Π_(j=1) ^(i)(1−X_(j)x), f(x) divides Π_(j=1) ^(i)(1−X_(j)x) as well. Thus,

${{{\overset{\sim}{\Lambda}}^{(\sigma_{i})}(x)}{S^{(\sigma_{i})}(x)}} = {\frac{{\hat{\Omega}}^{(\sigma_{i})}(x)}{\prod\limits_{j = 1}^{i}\left( {1 - {X_{j}x}} \right)} + {x^{2\; t}{\frac{f(x)}{\prod\limits_{j = 1}^{i}\left( {1 - {X_{j}x}} \right)}.}}}$

Equivalently,

$\frac{{\hat{\Omega}}^{(\sigma_{i})}(x)}{\prod\limits_{j = 1}^{i}\left( {1 - {X_{j}x}} \right)} = {{{\overset{\sim}{\Lambda}}^{(\sigma_{i})}(x)}{S^{(\sigma_{i})}(x)}{\left( {{mod}\; x^{2\; t}} \right).}}$

The above equality, in conjunction with the fact that the degree of {circumflex over (Ω)}^((σ) ^(i) ⁾(x) is less than that of Λ^((σ) ^(i) ⁾(x), indicates that {tilde over (Λ)}^((σ) ^(i) ⁾(x) generates the sequence S₀ ^((σ) ^(i) ⁾, S₁ ^((σ) ^(i) ⁾, . . . , S_(2t−1) ^((σ) ^(i) ⁾. On the other hand, the polynomial {tilde over (Λ)}^((σ) ^(i) ⁾(x) has a degree of at most t; this contradicts with the fact there is unique minimum degree polynomial that generates S₀ ^((σ) ^(i) ⁾, S₁ ^((σ) ^(i) ⁾, . . . , S_(2t−1) ^((σ) ^(i) ⁾, namely, Π_(j=1) ^(i)(1−{tilde over (X)}_(j)x). This concludes the lemma.

The computation can be simplified

{circumflex over (Ω)}^((σ) ^(i+1) ⁾(x)=(1+xa(x))Λ^((σ) ^(i) ⁾(x)S ^((σ) ^(i+1) ⁾(x)+b(x)·xB ^((σ) ^(i) ⁾(x)S ^((σ) ^(i+1) ⁾(x)(mod x ^(2t))  (14)

where a(x) and b(x) are unknown polynomials with the underlying condition that Λ^((σ) ^(i) ⁾(x)=(1+xa(x))·Λ^((σ) ^(i) ⁾(x)+b(x)·xB^((σ) ^(i) ⁾(x) has a degree less than 2t and contains the roots X_(i+1) ⁻¹. Note that neither Λ^((σ) ^(i) ⁾(x) nor B^((σ) ^(i) ⁾(x) generates S^((σ) ^(i+1) ⁾(x). Thus, the following inequality holds

{circumflex over (Ω)}^((σ) ^(i+1) ⁾(x)≠(1+xa(x))(Λ^((σ) ^(i) ⁾(x)S ^((σ) ^(i+1) ⁾(x)mod x ^(2t))+b(x)(xB ^((σ) ^(i) ⁾(x)S ^((σ) ^(i+1) ⁾(x)mod x ^(2t))

It has been shown in equation 13 that Λ^((σ) ^(i+1) ⁾(x) generates S^((σ) ^(i+1) ⁾(x). Thus, all terms with degrees higher than that of Λ^((σ) ^(i+1) ⁾(x) can be safely ignored. To this end, the following is defined

[x ^(l) Ω ^((σ) ^(i) ⁾](x)

x ^(l)Λ^((σ) ^(i) ⁾(x)S ^((σ) ^(i+1) ⁾(x)(mod x ^(2t−1)).  (15)

[x ^(l) Θ ^((σ) ^(i) ⁾](x)

x ^(l) B ^((σ) ^(i) ⁾(x)S ^((σ) ^(i+1) ⁾(x)(mod x ^(2t−1)).  (16)

Consequently,

$\begin{matrix} \begin{matrix} {{\left\lbrack {x^{l}{\overset{\_}{\Omega}\;}^{(\sigma_{i})}} \right\rbrack (x)} = {{x^{l}\left( {{\Lambda^{(\sigma_{i})}(x)}{S^{(\sigma_{i + 1})}(x)}\left( {{mod}\; x^{L_{\Lambda}}} \right)} \right)} +}} \\ {{{\Lambda^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}Y_{i + 1}X_{i + 1}{\sum\limits_{j = {L_{\Lambda} + l}}^{{2\; t} - 2}{X_{i + 1}^{f - l}x^{j}}}}} \end{matrix} & (17) \\ \begin{matrix} {{\left\lbrack {x^{l}{\overset{\_}{\Theta}\;}^{(\sigma_{i})}} \right\rbrack (x)} = {{x^{l}\left( {{B^{(\sigma_{i})}(x)}{S^{(\sigma_{i + 1})}(x)}\left( {{mod}\; x^{L_{B}}} \right)} \right)} +}} \\ {{{B^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}Y_{i + 1}X_{i + 1}{\sum\limits_{j = {L_{B} + l}}^{{2\; t} - 2}{X_{i + 1}^{j - l}x^{j}}}}} \end{matrix} & (18) \end{matrix}$

where L_(Λ) and L_(B) denote the length of Λ^((σ) ^(i) ⁾(x) and B^((σ) ^(i) ⁾(x), respectively.

It is observed that enforcing the criteria {circumflex over (Ω)}^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0 and {circumflex over (Θ)}^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0 is primarily of concern and it is therefore not necessary to keep track of {circumflex over (Ω)}^((σ) ^(i) ⁾(x) and {circumflex over (Θ)}^((σ) ^(i) ⁾(x). This can be effectively achieved by the following equations.

$\begin{matrix} \begin{matrix} {{{\overset{\_}{\Omega}\;}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} = {{\sum\limits_{j = 0}^{L_{\Lambda} - 1}{S_{j}^{(\sigma_{i + 1})}{X_{i + 1}^{- j} \cdot {\sum\limits_{l = 0}^{L_{\Lambda} - 1 - j}{\Lambda_{l}^{(\sigma_{i})}X_{i + 1}^{- l}}}}}} +}} \\ {{{\delta_{({L_{\Lambda} - 1})}Y_{i + 1}X_{i + 1}{\Lambda^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}},}} \end{matrix} & (19) \\ \begin{matrix} {{{\overset{\_}{\Theta}\;}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} = {{\sum\limits_{j = 0}^{L_{B} - 1}{S_{j}^{(\sigma_{i + 1})}{X_{i + 1}^{- j} \cdot {\sum\limits_{l = 0}^{L_{B} - 1 - j}{B_{l}^{(\sigma_{i})}X_{i + 1}^{- l}}}}}} +}} \\ {{\delta_{({L_{B} - 1})}Y_{i + 1}X_{i + 1}{{B^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}.}}} \end{matrix} & (20) \end{matrix}$

where δ_(l) is 1 if l is odd or 0 otherwise. Note that the second summation in equation 19 can be obtained intermediately during the evaluation of Λ^((σ) ^(i) ⁾(X_(i+1) ⁻¹), and that

[x ^(l) Ω ^((σ) ^(i) ⁾](X _(i+1) ⁻¹)=X _(i+1) ⁻¹( Ω ^((σ) ^(i) ⁾(X _(i+1) ⁻¹)+δ_(l) Y _(i+1) X _(i+1)Λ^((σ) ^(i) ⁾(X _(i+1) ⁻¹))  (21)

[x ^(l) Θ ^((σ) ^(i) ⁾](X _(i+1) ⁻¹)=X _(i+1) ⁻¹( Θ ^((σ) ^(i) ⁾(X _(i+1) ⁻¹)+δ₁ Y _(i+1) X _(i+1) B ^((σ) ^(i) ⁾(X _(i+1) ⁻¹))  (22)

The above equation is valid for Ω ^((σ) ^(i) ⁾ (but not {circumflex over (Θ)}^((σ) ^(i) ⁾) with some modifications. For the last iteration, the evaluation of {circumflex over (Θ)}^((σ) ^(i) ⁾ is not necessary.

FIG. 3 is a flowchart illustrating an embodiment of a process for incrementally generating error locator polynomials. In the example shown, the process is an alternative to a straightforward Chase decoder and circumvents repeatedly performing a Berlekamp-Massey process to obtain error locator polynomials for each test error pattern when flipping bit patterns. At 300, initialization is performed using an initial dataword. In some embodiments, the initial dataword is obtained from a soft output Viterbi decoder and a full Berlekamp-Massey process is performed. It is decided at 302 whether the results are satisfactory. For example, an error locator polynomial generated at 300 may be satisfactory and thus it is not necessary to generate other error locator polynomials. At 304, error locator polynomials are incrementally generated for test error patterns and one is selected for use in subsequent processing. In some embodiments, all possible test error patterns are processed. In some embodiments, the process terminates when at least one of the error locator polynomials generated at 304 satisfies certain criteria.

FIG. 4 is a flowchart illustrating an embodiment of a process for initialization associated with incrementally generating error locator polynomials. In the example shown, initialization at 300 can be performed using the process illustrated. Alternatively, other techniques may be used.

At 400, a received dataword and a list of error events are obtained from a soft output Viterbi decoder. For example, the inputs r=[r_(n−1), r_(n−2), . . . , r₁, r₀] and (X₁,Y₁), (X₂,Y₂), . . . , (X_(r),Y_(r)) are obtained.

At 402, syndromes are calculated. For example, the equation

${S_{i} = {\sum\limits_{j = 0}^{n - 1}{r_{j}\alpha^{j{({i + 1})}}}}},{j = 0},1,2,\ldots \mspace{14mu},{{2t} - 1}$

is used.

A Berlekamp-Massey process is performed to obtain an error locator polynomial, Λ(x), and a scratch polynomial, B(x), at 404. Some implementations of the Berlekamp-Massey process require 2t cycles. Incrementally generating error locator polynomials for each test error pattern circumvents repetition of the Berlekamp-Massey process and reduces the amount of time it takes to generate error locator polynomials for all combinations of flipped test error patterns. In some embodiments, additional or alternative polynomials are generated, such as the scratch polynomial, B(x).

At 406, a Chien search and error correction is performed using the error locator polynomial, Λ(x), and the scratch polynomial, B(x). If the Chien search and error correction are successful then processing may conclude without incrementally generating error locator polynomials for flipped test error patterns. For example, if the data is read back almost perfectly from a storage medium and there is little or no error in the received data then the error correction performed by the initialization process is sufficient.

In some embodiments, data associated with the initialization process is stored. Referring to the example of FIG. 2, the error locator polynomial, scratch polynomial, and syndromes are saved and associated with initial dataword 200. This saved data is then used to initialize processing for branches 202, 204, and/or 206.

Λ^((σ) ⁰ ⁾(x)←Λ(x), B ^((σ) ⁰ ⁾(x)←B(x), S ^((σ) ⁰ ⁾(x)←S(x)

FIG. 5 is a flowchart illustrating an embodiment of a process for performing error correction using polynomials selected from an incrementally generated group. In the example shown, the process can be used to incrementally generate polynomials at 304. Referring to the example of FIG. 2, the process can be used to traverse branches 202, 204, and 206.

At 500, syndromes for a current test error pattern are updated. In some embodiments, the following equation is used:

S _(j) ^((σ) ^(i+1) ⁾ ←S _(j) ^((σ) ^(i) ⁾ +Y _(i+1) X _(i+1) ^(j+1) j=0, 1, 2, . . . , t+τ−1.

If it is the beginning of a branch in a tree structure, saved syndromes associated with initial test pattern 200 is used. If the process is in the middle of a given branch; syndromes from the immediately prior test error pattern are used.

In some embodiments, not all syndromes are updated since the syndromes S_(y+τ) ^((σ) ^(i) ⁾, S_(t+τ+1) ^((σ) ^(i) ⁾, . . . , S_(2t−1) ^((σ) ^(i) ⁾ are not used in the iterations.

Polynomials associated with previous test error pattern are evaluated at 502. In some embodiments, the following polynomials are evaluated:

Λ^((σ) ^(i) ⁾(X_(i+1) ⁻¹), B^((σ) ^(i) ⁾(X_(i+1) ⁻¹), Ω ^((σ) ^(i) ⁾(X_(i+1) ⁻¹), Θ ^((σ) ^(i) ⁾(X_(i+1) ⁻¹)

An error locator polynomial and a scratch polynomial are generated for the current test error pattern using the evaluated polynomials. In some embodiments, case statements are used to determine an appropriate LSFR to use and the case statements cover all possible cases. In some embodiments, the following case statements and associated LSFR are used. In the embodiment shown, a given polynomial for the current test error pattern is based on the immediately prior version of that polynomial.

$\begin{matrix} {{{Case}\mspace{14mu} 1:\mspace{14mu} {\Lambda^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}} = {{0\bigwedge{{\overset{\_}{\Omega}}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}} = 0}} & \; \\ \left\{ \begin{matrix} \left. {\Lambda^{(\sigma_{i + 1})}(x)}\leftarrow{\Lambda^{(\sigma_{i})}(x)} \right. \\ \left. {B^{(\sigma_{i + 1})}(x)}\leftarrow{\left( {1 - {X_{i + 1}^{2}x^{2}}} \right){B^{(\sigma_{i})}(x)}} \right. \\ \left. L_{\Lambda}\leftarrow{L_{\Lambda}\mspace{31mu} L_{B}}\leftarrow{L_{B} + 2} \right. \end{matrix} \right. & (23) \\ {{{Case}\mspace{14mu} 2\text{:}\mspace{14mu} {B^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}} = {{0\bigwedge{{\overset{\_}{\Theta}}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}} = 0}} & \; \\ \left\{ \begin{matrix} \left. {\Lambda^{(\sigma_{i + 1})}(x)}\leftarrow{\left( {1 - {X_{i + 1}^{2}x^{2}}} \right){\Lambda^{(\sigma_{i})}(x)}} \right. \\ \left. {B^{(\sigma_{i + 1})}(x)}\leftarrow{B^{(\sigma_{i})}(x)} \right. \\ \left. L_{\Lambda}\leftarrow{L_{\Lambda} + {2\mspace{31mu} L_{B}}}\leftarrow L_{B} \right. \end{matrix} \right. & (24) \\ {{{Case}\mspace{14mu} 3\text{:}\mspace{14mu} L_{\Lambda}} < {L_{B}\bigwedge{\Lambda^{(\sigma_{i})}\left( X_{i + 1}^{1} \right)}} \neq 0} & \; \\ \begin{matrix} \left\{ \begin{matrix} \left. {\Lambda^{(\sigma_{i + 1})}(x)}\leftarrow{\left( {1 - {X_{i + 1}^{2}x^{2}}} \right){\Lambda^{(\sigma_{i})}(x)}} \right. \\ \left. {B^{(\sigma_{i + 1})}(x)}\leftarrow{{B^{(\sigma_{i})}(x)} + {{ax}\; {\Lambda^{(\sigma_{i})}(x)}} + {{bx}^{2}{\Lambda^{(\sigma_{i})}(x)}}} \right. \\ \left. L_{\Lambda}\leftarrow{L_{\Lambda} + {2\mspace{31mu} L_{B}}}\leftarrow L_{B} \right. \end{matrix} \right. & \; \end{matrix} & (25) \end{matrix}$

where a and b are suitable values to enforce B^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0 and {circumflex over (Θ)}^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0, such that

$\begin{matrix} \left\{ \begin{matrix} {{{B^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a\left\lbrack {x\; \Lambda^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b\left\lbrack {x^{2}\Lambda^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \\ {{{{\overset{\_}{\Theta}\;}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a\left\lbrack {x\; {\overset{\_}{\Omega}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b\left\lbrack {x^{2}{\overset{\_}{\Omega}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \end{matrix} \right. & \; \\ {{{Case}\mspace{14mu} 4\text{:}\mspace{14mu} L_{\Lambda}} > {L_{B}\bigwedge{B^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}} \neq 0} & \; \\ \left\{ \begin{matrix} \left. {\Lambda^{(\sigma_{i + 1})}(x)}\leftarrow{{\Lambda^{(\sigma_{i})}(x)} + {{ax}\; {B^{(\sigma_{i})}(x)}} + {{bx}^{2}{B^{(\sigma_{i})}(x)}}} \right. \\ \left. {B^{(\sigma_{i + 1})}(x)}\leftarrow{\left( {1 - {X_{i + 1}^{2}x^{2}}} \right){B^{(\sigma_{i})}(x)}} \right. \\ \left. L_{\Lambda}\leftarrow{L_{\Lambda}\mspace{31mu} L_{B}}\leftarrow{L_{B} + 2} \right. \end{matrix} \right. & (26) \end{matrix}$

where a and b are suitable values to enforce Λ^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0 and {circumflex over (Ω)}^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0, such that

$\begin{matrix} \left\{ {{{\begin{matrix} {{{\Lambda^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a\left\lbrack {x\; B^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b\left\lbrack {x^{2}B^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \\ {{{{\overset{\_}{\Omega}\;}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a\left\lbrack {x\; {\overset{\_}{\Theta}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b\left\lbrack {x^{2}{\overset{\_}{\Theta}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \end{matrix}{Case}\mspace{14mu} 5\text{:}\mspace{14mu} L_{\Lambda}} < {L_{B}\bigwedge{\Lambda^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}}} = {{0\bigwedge{{\overset{\_}{\Omega}}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}} \neq 0}} \right. & \; \\ \left\{ \begin{matrix} \left. {\Lambda^{(\sigma_{i + 1})}(x)}\leftarrow{\left( {1 - {X_{i + 1}x}} \right){\Lambda^{(\sigma_{i})}(x)}} \right. \\ \left. {B^{(\sigma_{i + 1})}(x)}\leftarrow{{B^{(\sigma_{i})}(x)} + {{ax}\; {\Lambda^{(\sigma_{i})}(x)}} + {{bx}\; {B^{(\sigma_{i})}(x)}}} \right. \\ \left. L_{\Lambda}\leftarrow{L_{\Lambda} + {1\mspace{31mu} L_{B}}}\leftarrow{L_{B} + 1} \right. \end{matrix} \right. & (27) \end{matrix}$

where a and b are suitable values to enforce B^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0 and {circumflex over (Θ)}^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0, such that

$\begin{matrix} \left\{ {{{\begin{matrix} {{{B^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a\left\lbrack {x\; \Lambda^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b\left\lbrack {xB}^{(\sigma_{i})} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \\ {{{{\overset{\_}{\Theta}\;}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a\left\lbrack {x\; {\overset{\_}{\Omega}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b\left\lbrack {x{\overset{\_}{\Theta}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \end{matrix}{Case}\mspace{14mu} 6\text{:}\mspace{14mu} L_{\Lambda}} > {L_{B}\bigwedge{B^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}}} = {{0\bigwedge{{\overset{\_}{\Theta}}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}} \neq 0}} \right. & \; \\ \left\{ \begin{matrix} \left. {\Lambda^{(\sigma_{i + 1})}(x)}\leftarrow{{\Lambda^{(\sigma_{i})}(x)} + {{ax}\; {B^{(\sigma_{i})}(x)}} + {{bx}\; {\Lambda^{(\sigma_{i})}(x)}}} \right. \\ \left. {B^{(\sigma_{i + 1})}(x)}\leftarrow{\left( {1 - {X_{i + 1}x}} \right){B^{(\sigma_{i})}(x)}} \right. \\ \left. L_{\Lambda}\leftarrow{L_{\Lambda} + {1\mspace{31mu} L_{B}}}\leftarrow{L_{B} + 1} \right. \end{matrix} \right. & (28) \end{matrix}$

where a and b are suitable values to enforce Λ^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0 and {circumflex over (Ω)}^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0, such that

$\begin{matrix} \left\{ {{\begin{matrix} {{{\Lambda^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a\left\lbrack {x\; B^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b\left\lbrack {x\; \Lambda^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \\ {{{{\overset{\_}{\Omega}\;}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a\left\lbrack {x{\overset{\_}{\Theta}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b\left\lbrack {x{\overset{\_}{\Omega}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \end{matrix}{Case}\mspace{14mu} 7\text{:}\mspace{14mu} L_{\Lambda}} = {{{L_{B}\bigwedge{B^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}}{{\overset{\_}{\Omega}}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}} \neq {{\Lambda^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}{{\overset{\_}{\Theta}}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}}}} \right. & \; \\ \left\{ \begin{matrix} \left. {\Lambda^{(\sigma_{i + 1})}(x)}\leftarrow{{\Lambda^{(\sigma_{i})}(x)} + {{ax}\; {B^{(\sigma_{i})}(x)}} + {{bx}\; {\Lambda^{(\sigma_{i})}(x)}}} \right. \\ \left. {B^{(\sigma_{i + 1})}(x)}\leftarrow{{B^{(\sigma_{i})}(x)} + {a^{\prime}x\; {\Lambda^{(\sigma_{i})}(x)}} + {b^{\prime}x\; {B^{(\sigma_{i})}(x)}}} \right. \\ \left. L_{\Lambda}\leftarrow{L_{\Lambda} + {1\mspace{31mu} L_{B}}}\leftarrow{L_{B} + 1} \right. \end{matrix} \right. & (29) \end{matrix}$

where a and b are suitable values to enforce Λ^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0 and {circumflex over (Ω)}^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0, such that

$\left\{ \begin{matrix} {{{\Lambda^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a\left\lbrack {x\; B^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b\left\lbrack {x\; \Lambda^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \\ {{{{\overset{\_}{\Omega}\;}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a\left\lbrack {x\; {\overset{\_}{\Theta}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b\left\lbrack {x\; {\overset{\_}{\Omega}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \end{matrix} \right.$

and a′ and b′ are suitable values to enforce B^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0 and {circumflex over (Θ)}^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0, such that

$\begin{matrix} \left\{ {\begin{matrix} {{{B^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a^{\prime}\left\lbrack {x\; \Lambda^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b^{\prime}\left\lbrack {x^{2}B^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \\ {{{{\overset{\_}{\Theta}\;}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a^{\prime}\left\lbrack {x\; {\overset{\_}{\Omega}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b^{\prime}\left\lbrack {x^{2}{\overset{\_}{\Theta}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \end{matrix}{Case}\mspace{14mu} 8\text{:}\mspace{14mu} \begin{matrix} {L_{\Lambda} = {{L_{B}\bigwedge{\Lambda^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}} \neq {{0\bigwedge{B^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}}{{\overset{\_}{\Omega}}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}}}} \\ {= {{\Lambda^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}{{\overset{\_}{\Theta}}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}}} \end{matrix}} \right. & \; \\ \left\{ \begin{matrix} \left. {\Lambda^{(\sigma_{i + 1})}(x)}\leftarrow{\left( {1 - {X_{i + 1}^{2}x^{2}}} \right){\Lambda^{(\sigma_{i})}(x)}} \right. \\ \left. {B^{(\sigma_{i + 1})}(x)}\leftarrow{{{\Lambda^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} \cdot {B^{(\sigma_{i})}(x)}} + {{B^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} \cdot {\Lambda^{(\sigma_{i})}(x)}}} \right. \\ \left. L_{\Lambda}\leftarrow{L_{\Lambda} + {2\mspace{31mu} L_{B}}}\leftarrow L_{B} \right. \end{matrix} \right. & (30) \end{matrix}$

At 506, it is determined whether to save data. For example, the error locator and scratch polynomial generated, at 504 are compared to saved polynomials. A metric, such as a minimum distance, can be used in a comparison. In some embodiments, if this is the first iteration (e.g., test pattern 208) then the polynomials generated at 504 are compared to polynomials generating during an initialization process (e.g., associated with initial test pattern 200). If it is decided to save, at 508 the error locator polynomial and scratch polynomial for this iteration are saved. The previously saved polynomials are discarded.

After saving at 508 or if the decision at 506 is to not save, at 510 it is decided whether generation of polynomials is done. In some embodiments, generation concludes when all possible flipped test patterns are processed. For example, when all of branches 1-3 (202-206, respectively) are processed generation concludes. In some embodiments, it is not necessary to process all possible test patterns. For example, the saved polynomials may be the minimal distance and further processing to generate additional polynomials is not necessary. If generation of polynomials is not done, at 500 the syndromes are updated. Otherwise, at 512 a Chien search and error correction is performed using the saved error locator polynomial and scratch polynomial.

In some embodiments, a particular case dominates the rest of the cases. In one example, case 7 occurs more frequently compared to the rest of the cases. In some embodiments, an implementation is optimized or otherwise improved to take advantage of a particular case that occurs more frequently. The particular optimization or improvement can depend upon the statistical distribution associated with the case statements, the particular implementation of a decoder, etc.

In some embodiments, polynomials are incrementally generated in a parallel manner. Two or more test patterns may be processed simultaneously to further reduce the amount of time to generate polynomials for multiple test error patterns. Trade-offs associated with processing speed, size/cost, and/or design complexity of a decoder with parallel processing are evaluated to select an appropriate number of test error patterns to process in parallel.

In various embodiments different techniques are used in addition to or as an alternative to the example described. In some embodiments, case statements are not used. In some embodiments, different linear feedback shift registers and/or different associated conditions are used to incrementally generate polynomials. In some embodiments, a different set of polynomials are compared, generated, and/or saved. For example, in some embodiments less than four polynomials are evaluated at 502.

The following lemmas discuss properties associated with the above embodiment for initialization and incremental generation of error locator polynomials.

Lemma 4 After completion of the example process, the following occurs at the end of the i-th iteration

L _(Λ) +L _(B)=2(t+i).  (31)

Lemma 5 The example process precisely generates the solution for the proposed optimization problem.

Proof: The proof is by induction. Assume that Λ^((σ) ^(i) ⁾(x) and B^((σ) ^(i) ⁾(x) optimize the proposed problem A[σ_(i)] and B[σ_(i)], respectively, for the error pattern set σ_(i).

In Case 1, Λ^((σ) ^(i) ⁾(x) suffices to accommodate criteria (i), (ii) and (iii) of A[σ_(i)] and thus it is the optimal solution. As for B, incorporating Λ is not useful in achieving criteria (ii) and (iii) of B[σ_(i)]. It can be verified that the described LFSR satisfies criteria (ii) and (iii) for B[σ_(i)] while minimizing the degree (recall that Λ^((σ) ^(i) ⁾(x) and B^((σ) ^(i) ⁾(x) both cannot divide (1−X_(i+1)x) as discussed in Lemma 1). Case 2 is analogous to Case 1.

In Case 3, it is noted that L_(xB)>L_(Λ)+2. Therefore, incorporating xB^((σ) ^(i) ⁾(x) into Λ^((σ) ^(i+1) ⁾(x) would lead to a degree of at least L_(Λ)+3. Thus, the given form of Λ^((σ) ^(i+1) ⁾(x) is the optimal solution. On the other hand, the given form of B^((σ) ^(i+1) ⁾(x) does not increase the degree while satisfying all three constraints. Case 4 is analogous to Case 3.

In Case 5, the given form of Λ^((σ) ^(i+1) ⁾(x) (which has a lower degree than the one given in Case 3) satisfies all three constraints while securing the minimum degree. On the other hand, the form of B^((σ) ^(i+1) ⁾(x) given in Case 3 is unable to meet all three constraints. Thus the given form achieves the minimum degree while meeting all three constraints. Case 6 follows the same arguments as Case 5.

In Case 7, it is impossible to meet the three constraints without increasing the degree of Λ(x) or B(x) while the given form increases the degree by one and satisfies all constraints.

In Case 8, the given form of B^((σ) ^(i+1) ⁾(x) meets all three constraints without increasing the degree. However, even increasing the degree L_(Λ) by 1 will not satisfy the three constraints, thus the proposed form minimizes the degree. Note that Λ^((σ) ^(i+1) ⁾(x) cannot take the form of B^((σ) ^(i+1) ⁾(x) as constraint (i) of A[σ_(i)] is not satisfied.

Cases 2, 3 and 5 cover the branch L_(Λ)<L_(B); Cases 1, 4 and 6 cover the branch L_(Λ)>L_(B); Cases 1, 7 and 8 cover the branch L_(Λ)=L_(B). Thus, the above 8 cases cover all possibilities (recall that B and Λ must not share a same root to be interpolated as discussed in Lemma 1 (iii)). Occasionally, some of the cases are overlapping but the solution is congruent when an overlapping condition occurs.

Lemmas 3 and 5 assert that incremental generation of polynomials is a “one-pass” (when implemented in parallel) alternative to straightforward Chase decoding. Consider a given sequential flipping of error patterns (X₁,Y₁), (X₂,Y₂), . . . , (X₁,Y₁) for a received word r. If after flipping the pattern set σ_(i), the modified word is within distance t (where t is the error-correction capability) from a codeword, then Λ^((σ) ^(i) ⁾(x) obtained by the described incremental generation process is exactly the error locator polynomial associated with this codeword.

In some embodiments, with an error locator polynomial obtained, Forney's formula is used to determine the corresponding error magnitudes. From a computational point of view, there is a complexity of O(nt) to determine all error locations for a given error locator polynomial. In some embodiments, this is circumvented by translating operations to vector operations, where the vectors Λ, B, {circumflex over (Ω)}, and {circumflex over (Θ)} are the evaluation vectors of the corresponding polynomials at points α^(i), i=0, 1, 2, . . . , n−1. If vector operations are used, all four polynomials are tracked rather than just Λ and B as described in the example of FIG. 5. The example of FIG. 5 is appropriately modified. Multiplication of a polynomial with x is translated to component-wise multiplication of an evaluation vector with the vector [α⁰, α¹, α², . . . , α^(n−1)]. Every vector operation has a complexity of O(n) instead of a complexity O(t) associated with the example of FIG. 5. The complexity of one iteration is reduced from a complexity of O(nt) to O(n).

Thus, one iteration of the incremental generation technique (not using vector operations) has a computational complexity of O(t). In some embodiments, this is performed in “one-pass” using parallel operations. By vectorizing the polynomials Λ, B, {circumflex over (Ω)}, and {circumflex over (Θ)} at points α^(i), i=0, 1, 2, . . . , n−1, the complete iteration (including polynomial updating and error locating) has a complexity of O(n). In some embodiments, this is performed in “one-pass” using parallel operations.

Although the foregoing embodiments have been described in some detail for purposes of clarity of understanding, the invention is not limited to the details provided. There are many alternative ways of implementing the invention. The disclosed embodiments are illustrative and not restrictive. 

1. A method for incrementally generating an error locator polynomial, including: using the processor to flip a bit pattern Y_(i) at a symbol X_(i) within an initial dataword to obtain a first test error pattern; and using the processor to flip a bit pattern Y_(j) at a symbol X_(j) within the first test error pattern to obtain a second test error pattern, wherein i≠j.
 2. The method of claim 1 further comprising: using the processor to flip a bit pattern Y_(j) at a symbol X_(j) within the initial dataword to obtain a third test error pattern; and using the processor to flip a bit pattern Y_(k) at a symbol X_(k) within the third test error pattern to obtain a fourth test error pattern, wherein k≠i and k≠j.
 3. The method of claim 2 further comprising using the processor to flip a bit pattern Y_(k) at a symbol X_(k) within the initial dataword to obtain a fifth test error pattern.
 4. The method of claim 1 further comprising: performing soft-output Viterbi decoding to obtain a received dataword, r=[R_(n−1), r_(n−2), . . . , r₁, r₀], and a list of error events, (X₁,Y₁), (X₂,Y₂), . . . , (X_(r),Y_(r)), used in flipping to obtain the first test error pattern and the second test error pattern; performing error correction decoding using the received dataword and the list of error events; and determining whether the error correction decoding is successful, wherein using the processor to incrementally generate the error locator polynomial is skipped in the event the error correction decoding is successful.
 5. The method of claim 1 further comprising: generating a plurality of test error patterns that includes the first test error pattern and the second test error pattern; and selecting one of the plurality of test error patterns.
 6. The method of claim 5, wherein selecting one of the plurality of test error patterns includes: comparing a first minimum distance associated with the first test error pattern with a second minimum distance associated with the second test error pattern; determining whether to keep information associated with the first test error pattern or the second test error pattern based at least in part on the comparison of the first minimum distance and the second minimum distance; keeping an error locator polynomial and a scratch polynomial associated with the first test error pattern and discarding an error locator polynomial and a scratch polynomial associated with the second test error pattern in the event it is determined to keep information associated with the first test error pattern; and keeping the error locator polynomial and the scratch polynomial associated with the second test error pattern and discarding the error locator polynomial and the scratch polynomial associated with the first test error pattern in the event it is determined to keep information associated with the second test error pattern.
 7. The method of claim 1 further comprising generating an error locator polynomial and a scratch polynomial using the following case statement: $\begin{matrix} {{{{Case}\mspace{14mu} 1\text{:}\mspace{14mu} {\Lambda^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}} = {{0\bigwedge{{\overset{\_}{\Omega}}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}} = 0}}\left\{ \begin{matrix} \left. {\Lambda^{(\sigma_{i + 1})}(x)}\leftarrow{\Lambda^{(\sigma_{i})}(x)} \right. \\ \left. {B^{(\sigma_{i + 1})}(x)}\leftarrow{\left( {1 - {X_{i + 1}^{2}x^{2}}} \right){B^{(\sigma_{i})}(x)}} \right. \\ \left. L_{\Lambda}\leftarrow{L_{\Lambda}\mspace{31mu} L_{B}}\leftarrow{L_{B} + 2} \right. \end{matrix} \right.} & \; \\ {{{{Case}\mspace{14mu} 2\text{:}\mspace{14mu} {B^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}} = {{0\bigwedge{{\overset{\_}{\Theta}}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}} = 0}}\left\{ \begin{matrix} \left. {\Lambda^{(\sigma_{i + 1})}(x)}\leftarrow{\left( {1 - {X_{i + 1}^{2}x^{2}}} \right){\Lambda^{(\sigma_{i})}(x)}} \right. \\ \left. {B^{(\sigma_{i + 1})}(x)}\leftarrow{B^{(\sigma_{i})}(x)} \right. \\ \left. L_{\Lambda}\leftarrow{L_{\Lambda} + {2\mspace{31mu} L_{B}}}\leftarrow L_{B} \right. \end{matrix} \right.} & \; \\ {{{{Case}\mspace{14mu} 3\text{:}\mspace{14mu} L_{\Lambda}} < {L_{B}\bigwedge{\Lambda^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}} \neq 0}\left\{ \begin{matrix} \left. {\Lambda^{(\sigma_{i + 1})}(x)}\leftarrow{\left( {1 - {X_{i + 1}^{2}x^{2}}} \right){\Lambda^{(\sigma_{i})}(x)}} \right. \\ \left. {B^{(\sigma_{i + 1})}(x)}\leftarrow{{B^{(\sigma_{i})}(x)} + {{ax}\; {\Lambda^{(\sigma_{i})}(x)}} + {{bx}^{2}{\Lambda^{(\sigma_{i})}(x)}}} \right. \\ \left. L_{\Lambda}\leftarrow{L_{\Lambda} + {2\mspace{31mu} L_{B}}}\leftarrow L_{B} \right. \end{matrix} \right.} & \; \end{matrix}$ where a and b are suitable values to enforce B^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0 and {circumflex over (Θ)}^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0, such that $\left\{ {{\begin{matrix} {{{B^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a\left\lbrack {x\; \Lambda^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b\left\lbrack {x^{2}\Lambda^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \\ {{{{\overset{\_}{\Theta}\;}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a\left\lbrack {x\; {\overset{\_}{\Omega}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b\left\lbrack {x^{2}{\overset{\_}{\Omega}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \end{matrix}{Case}\mspace{14mu} 4\text{:}\mspace{14mu} L_{\Lambda}} > {L_{B}\bigwedge{B^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}} \neq {0\; \left\{ \begin{matrix} \left. {\Lambda^{(\sigma_{i + 1})}(x)}\leftarrow{{\Lambda^{(\sigma_{i})}(x)} + {{ax}\; {B^{(\sigma_{i})}(x)}} + {{bx}^{2}{B^{(\sigma_{i})}(x)}}} \right. \\ \left. {B^{(\sigma_{i + 1})}(x)}\leftarrow{\left( {1 - {X_{i + 1}^{2}x^{2}}} \right){B^{(\sigma_{i})}(x)}} \right. \\ \left. L_{\Lambda}\leftarrow{L_{\Lambda}\mspace{31mu} L_{B}}\leftarrow{L_{B} + 2} \right. \end{matrix} \right.}} \right.$ where a and b are suitable values to enforce Λ^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0 and {circumflex over (Ω)}^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0, such that $\left\{ {{\begin{matrix} {{{B^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a\left\lbrack {x\; \Lambda^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b\left\lbrack {x^{2}\Lambda^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \\ {{{{\overset{\_}{\Theta}\;}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a\left\lbrack {x\; {\overset{\_}{\Omega}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b\left\lbrack {x^{2}{\overset{\_}{\Omega}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \end{matrix}{Case}\mspace{14mu} 5\text{:}\mspace{14mu} L_{\Lambda}} > {L_{B}\bigwedge{B^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}} \neq {0\left\{ \begin{matrix} \left. {\Lambda^{(\sigma_{i + 1})}(x)}\leftarrow{{\Lambda^{(\sigma_{i})}(x)} + {{ax}\; {B^{(\sigma_{i})}(x)}} + {{bx}^{2}{B^{(\sigma_{i})}(x)}}} \right. \\ \left. {B^{(\sigma_{i + 1})}(x)}\leftarrow{\left( {1 - {X_{i + 1}^{2}x^{2}}} \right){B^{(\sigma_{i})}(x)}} \right. \\ \left. L_{\Lambda}\leftarrow{L_{\Lambda}\mspace{31mu} L_{B}}\leftarrow{L_{B} + 2} \right. \end{matrix} \right.}} \right.$ where a and b are suitable values to enforce Λ^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0 and {circumflex over (Θ)}^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0, such that $\left\{ {{{\begin{matrix} {{{B^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a\left\lbrack {x\; \Lambda^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b\left\lbrack {x^{2}B^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \\ {{{{\overset{\_}{\Theta}\;}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a\left\lbrack {x\; {\overset{\_}{\Omega}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b\left\lbrack {x^{2}{\overset{\_}{\Theta}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \end{matrix}{Case}\mspace{14mu} 6\text{:}\mspace{14mu} L_{\Lambda}} > {L_{B}\bigwedge{B^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}}} = {{0\bigwedge{{\overset{\_}{\Theta}}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}} \neq {0\left\{ \begin{matrix} \left. {\Lambda^{(\sigma_{i + 1})}(x)}\leftarrow{{\Lambda^{(\sigma_{i})}(x)} + {{ax}\; {B^{(\sigma_{i})}(x)}} + {{bx}\; {\Lambda^{(\sigma_{i})}(x)}}} \right. \\ \left. {B^{(\sigma_{i + 1})}(x)}\leftarrow{\left( {1 - {X_{i + 1}x}} \right){B^{(\sigma_{i})}(x)}} \right. \\ \left. L_{\Lambda}\leftarrow{L_{\Lambda} + {1\mspace{31mu} L_{B}}}\leftarrow{L_{B} + 1} \right. \end{matrix} \right.}}} \right.$ where a and b are suitable values to enforce Λ^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0 and {circumflex over (Ω)}^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0, such that $\left\{ {{\begin{matrix} {{{\Lambda^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a\left\lbrack {x\; B^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b\left\lbrack {x\; \Lambda^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \\ {{{{\overset{\_}{\Omega}\;}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a\left\lbrack {x\; {\overset{\_}{\Theta}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b\left\lbrack {x\; {\overset{\_}{\Omega}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \end{matrix}{Case}\mspace{14mu} 7\text{:}\mspace{14mu} L_{\Lambda}} = {{{L_{B}\bigwedge{B^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}}{{\overset{\_}{\Omega}}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}} \neq {{\Lambda^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}\; {{\overset{\_}{\Theta}}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}\left\{ \begin{matrix} \left. {\Lambda^{(\sigma_{i + 1})}(x)}\leftarrow{{\Lambda^{(\sigma_{i})}(x)} + {{ax}\; {B^{(\sigma_{i})}(x)}} + {{bx}\; {\Lambda^{(\sigma_{i})}(x)}}} \right. \\ \left. {B^{(\sigma_{i + 1})}(x)}\leftarrow{{{B^{(\sigma_{i})}(x)}a^{\prime}x\; {\Lambda^{(\sigma_{i})}(x)}} + {b^{\prime}x\; {B^{(\sigma_{i})}(x)}}} \right. \\ \left. L_{\Lambda}\leftarrow{L_{\Lambda} + {1\mspace{31mu} L_{B}}}\leftarrow{L_{B} + 1} \right. \end{matrix} \right.}}} \right.$ where a and b are suitable values to enforce Λ^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0 and {circumflex over (Ω)}^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0, such that $\left\{ \begin{matrix} {{{\Lambda^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a\left\lbrack {x\; B^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b\left\lbrack {x\; \Lambda^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \\ {{{{\overset{\_}{\Omega}\;}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a\left\lbrack {x\; {\overset{\_}{\Theta}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b\left\lbrack {x\; {\overset{\_}{\Omega}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \end{matrix} \right.$ and a′ and b′ are suitable values to enforce B^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0 and {circumflex over (Ω)}^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0, such that $\left\{ {\begin{matrix} {{{B^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a^{\prime}\left\lbrack {x\; \Lambda^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b^{\prime}\left\lbrack {x\; B^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \\ {{{{\overset{\_}{\Theta}\;}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a^{\prime}\left\lbrack {x\; {\overset{\_}{\Omega}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b^{\prime}\left\lbrack {x\; {\overset{\_}{\Theta}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \end{matrix}{Case}\mspace{14mu} 8\text{:}\mspace{14mu} \begin{matrix} {L_{\Lambda} = {{L_{B}\bigwedge{\Lambda^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}} \neq {{0\bigwedge{B^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}}{{\overset{\_}{\Omega}}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}}}} \\ {= {{\Lambda^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}{{\overset{\_}{\Theta}}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}}} \end{matrix}\left\{ \begin{matrix} \left. {\Lambda^{(\sigma_{i + 1})}(x)}\leftarrow{\left( {1 - {X_{i + 1}^{2}x^{2}}} \right){\Lambda^{(\sigma_{i})}(x)}} \right. \\ \left. {B^{(\sigma_{i + 1})}(x)}\leftarrow{{{\Lambda^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} \cdot {B^{(\sigma_{i})}(x)}} + {{B^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} \cdot {\Lambda^{(\sigma_{i})}(x)}}} \right. \\ \left. L_{\Lambda}\leftarrow{L_{\Lambda} + {2\mspace{31mu} L_{B}}}\leftarrow L_{B} \right. \end{matrix} \right.} \right.$
 8. A system for incrementally generating an error locator polynomial, including: a processor; and a memory coupled with the processor, wherein the memory is configured to provide the processor with instructions which when executed cause the processor to: flip a bit pattern Y_(i) at a symbol X_(i) an initial dataword to obtain a first test error pattern; and flip a bit pattern Y_(j) at a symbol X_(j) within the first test error pattern to obtain a second test error pattern, wherein i≠j.
 9. The system of claim 8, wherein the memory is further configured to provide the processor with further instructions to: flip a bit pattern Y_(j) at a symbol X_(j) within the initial dataword to obtain a third test error pattern; and flip a bit pattern Y_(k) at a symbol X_(k) within the third test error pattern to obtain a fourth test error pattern, wherein k≠i and k≠j.
 10. The system of claim 9, wherein the memory is further configured to provide the processor with further instructions to flip a bit pattern Y_(k) at a symbol X_(k) within the initial dataword to obtain a fifth test error pattern.
 11. The system of claim 8, wherein the memory is further configured to provide the processor with further instructions to: perform soft-output Viterbi decoding to obtain a received dataword, r=[r_(n−1), r_(n−2), . . . , r₁, r₀], and a list of error events, (X₁,Y₁), (X₂,Y₂), . . . , (X_(r),Y_(r)), used in flipping to obtain the first test error pattern and the second test error pattern; perform error correction decoding using the received dataword and the list of error events; and determine whether the error correction decoding is successful, wherein using the processor to incrementally generate the error locator polynomial is skipped in the event the error correction decoding is successful.
 12. The system of claim 8, wherein the memory is further configured to provide the processor with further instructions to: generate a plurality of test error patterns that includes the first test error pattern and the second test error pattern; and select one of the plurality of test error patterns.
 13. The system of claim 12, wherein the instructions for selecting one of the plurality of test error patterns include instructions to: compare a first minimum distance associated with the first test error pattern with a second minimum distance associated with the second test error pattern; determine whether to keep information associated with the first test error pattern or the second test error pattern based at least in part on the comparison of the first minimum distance and the second minimum distance; keep an error locator polynomial and a scratch polynomial associated with the first test error pattern and discard an error locator polynomial and a scratch polynomial associated with the second test error pattern in the event it is determined to keep information associated with the first test error pattern; and keep the error locator polynomial and the scratch polynomial associated with the second test error pattern and discard the error locator polynomial and the scratch polynomial associated with the first test error pattern in the event it is determined to keep information associated with the second test error pattern.
 14. The system of claim 8, wherein the memory is further configured to provide the processor with further instructions to generate an error locator polynomial and a scratch polynomial using the following case statement: $\begin{matrix} {{\Lambda^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} = {{0\bigwedge{{\overset{\_}{\Omega}}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}} = 0}} & {{Case}\mspace{14mu} 1} \\ \left\{ \begin{matrix} \left. {\Lambda^{(\sigma_{i + 1})}(x)}\leftarrow{\Lambda^{(\sigma_{i})}(x)} \right. \\ \left. {B^{(\sigma_{i + 1})}(x)}\leftarrow{\left( {1 - {X_{i + 1}^{2}x^{2}}} \right){B^{(\sigma_{i})}(x)}} \right. \\ \left. L_{\Lambda}\leftarrow{L_{\Lambda}\mspace{31mu} L_{B}}\leftarrow{L_{B} + 2} \right. \end{matrix} \right. & \; \\ {{B^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} = {{0\bigwedge{{\overset{\_}{\Theta}}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}} = 0}} & {{Case}\mspace{14mu} 2} \\ \left\{ \begin{matrix} \left. {\Lambda^{(\sigma_{i + 1})}(x)}\leftarrow{\left( {1 - {X_{i + 1}^{2}x^{2}}} \right){\Lambda^{(\sigma_{i})}(x)}} \right. \\ \left. {B^{(\sigma_{i + 1})}(x)}\leftarrow{B^{(\sigma_{i})}(x)} \right. \\ \left. L_{\Lambda}\leftarrow{L_{\Lambda} + {2\mspace{31mu} L_{B}}}\leftarrow L_{B} \right. \end{matrix} \right. & \; \\ {L_{\Lambda} < {L_{B}\bigwedge{\Lambda^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}} \neq 0} & {{Case}\mspace{14mu} 3} \\ \left\{ \begin{matrix} \left. {\Lambda^{(\sigma_{i + 1})}(x)}\leftarrow{\left( {1 - {X_{i + 1}^{2}x^{2}}} \right){\Lambda^{(\sigma_{i})}(x)}} \right. \\ \left. {B^{(\sigma_{i + 1})}(x)}\leftarrow{{B^{(\sigma_{i})}(x)} + {{ax}\; {\Lambda^{(\sigma_{i})}(x)}} + {{bx}^{2}{\Lambda^{(\sigma_{i})}(x)}}} \right. \\ \left. L_{\Lambda}\leftarrow{L_{\Lambda} + {2\mspace{31mu} L_{B}}}\leftarrow L_{B} \right. \end{matrix} \right. & \; \end{matrix}$ where a and b are suitable values to enforce B^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0 and {circumflex over (Θ)}^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0, such that $\begin{matrix} \left\{ \begin{matrix} {{{B^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a\left\lbrack {x\; \Lambda^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b\left\lbrack {x^{2}\Lambda^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \\ {{{{\overset{\_}{\Theta}\;}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a\left\lbrack {x\; {\overset{\_}{\Omega}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b\left\lbrack {x^{2}{\overset{\_}{\Omega}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \end{matrix} \right. & \; \\ {L_{\Lambda} > {L_{B}\bigwedge{B^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}} \neq 0} & {{Case}\mspace{14mu} 4} \\ \left\{ \begin{matrix} \left. {\Lambda^{(\sigma_{i + 1})}(x)}\leftarrow{{\Lambda^{(\sigma_{i})}(x)} + {{ax}\; {B^{(\sigma_{i})}(x)}} + {{bx}^{2}{B^{(\sigma_{i})}(x)}}} \right. \\ \left. {B^{(\sigma_{i + 1})}(x)}\leftarrow{\left( {1 - {X_{i + 1}^{2}x^{2}}} \right){B^{(\sigma_{i})}(x)}} \right. \\ \left. L_{\Lambda}\leftarrow{L_{\Lambda}\mspace{31mu} L_{B}}\leftarrow{L_{B} + 2} \right. \end{matrix} \right. & \; \end{matrix}$ where a and b are suitable values to enforce Λ^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0 and {circumflex over (Ω)}^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0, such that $\begin{matrix} \left\{ \begin{matrix} {{{\Lambda^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a\left\lbrack {x\; B^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b\left\lbrack {x^{2}B^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \\ {{{{\overset{\_}{\Omega}\;}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a\left\lbrack {x\; {\overset{\_}{\Theta}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b\left\lbrack {x^{2}{\overset{\_}{\Theta}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \end{matrix} \right. & \; \\ {{L_{\Lambda} < {L_{B}\bigwedge{\Lambda^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}}} = {{0\bigwedge{{\overset{\_}{\Omega}}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}} \neq 0}} & {{Case}\mspace{14mu} 5} \\ \left\{ \begin{matrix} \left. {\Lambda^{(\sigma_{i + 1})}(x)}\leftarrow{\left( {1 - {X_{i + 1}x}} \right){\Lambda^{(\sigma_{i})}(x)}} \right. \\ \left. {B^{(\sigma_{i + 1})}(x)}\leftarrow{{B^{(\sigma_{i})}(x)} + {{ax}\; {\Lambda^{(\sigma_{i})}(x)}} + {{bx}\; {B^{(\sigma_{i})}(x)}}} \right. \\ {\left. L_{\Lambda}\leftarrow{L_{\Lambda} + {1\mspace{31mu} L_{B}}}\leftarrow{L_{B} + 1} \right.\;} \end{matrix} \right. & \; \end{matrix}$ where a and b are suitable values to enforce Λ^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0 and {circumflex over (Θ)}^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0, such that $\begin{matrix} \left\{ \begin{matrix} {{{B^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a\left\lbrack {x\; \Lambda^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b\left\lbrack {x\; B^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \\ {{{{\overset{\_}{\Theta}\;}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a\left\lbrack {x\; {\overset{\_}{\Omega}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b\left\lbrack {x^{2}{\overset{\_}{\Theta}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \end{matrix} \right. & \; \\ {{L_{\Lambda} > {L_{B}\bigwedge{B^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}}} = {{0\bigwedge{{\overset{\_}{\Theta}}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}} \neq 0}} & {{Case}\mspace{14mu} 6} \\ \left\{ \begin{matrix} \left. {\Lambda^{(\sigma_{i + 1})}(x)}\leftarrow{{\Lambda^{(\sigma_{i})}(x)} + {{ax}\; {B^{(\sigma_{i})}(x)}} + {{bx}\; {\Lambda^{(\sigma_{i})}(x)}}} \right. \\ \left. {B^{(\sigma_{i + 1})}(x)}\leftarrow{\left( {1 - {X_{i + 1}x}} \right){B^{(\sigma_{i})}(x)}} \right. \\ \left. L_{\Lambda}\leftarrow{L_{\Lambda} + {1\mspace{31mu} L_{B}}}\leftarrow{L_{B} + 1} \right. \end{matrix} \right. & \; \end{matrix}$ where a and b are suitable values to enforce Λ^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0 and {circumflex over (Ω)}^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0, such that $\begin{matrix} \left\{ \begin{matrix} {{{\Lambda^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a\left\lbrack {x\; B^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b\left\lbrack {x\; \Lambda^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \\ {{{{\overset{\_}{\Omega}\;}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a\left\lbrack {x\; {\overset{\_}{\Theta}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b\left\lbrack {x\left( \overset{\_}{\Omega} \right)}^{(\sigma_{i})} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \end{matrix} \right. & \; \\ {L_{\Lambda} = {{{L_{B}\bigwedge{B^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}}{{\overset{\_}{\Omega}}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}} \neq {{\Lambda^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}{{\overset{\_}{\Theta}}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}}}} & {{Case}\mspace{14mu} 7} \\ \left\{ \begin{matrix} \left. {\Lambda^{(\sigma_{i + 1})}(x)}\leftarrow{{\Lambda^{(\sigma_{i})}(x)} + {{ax}\; {V^{(\sigma_{i})}(x)}} + {{bx}\; {\Lambda^{(\sigma_{i})}(x)}}} \right. \\ \left. {B^{(\sigma_{i + 1})}(x)}\leftarrow{{B^{(\sigma_{i})}(x)} + {a^{\prime}x\; {\Lambda^{(\sigma_{i})}(x)}} + {b^{\prime}x\; {B^{(\sigma_{i})}(x)}}} \right. \\ \left. L_{\Lambda}\leftarrow{L_{\Lambda} + {1\mspace{31mu} L_{B}}}\leftarrow{L_{B} + 1} \right. \end{matrix} \right. & \; \end{matrix}$ where a and b are suitable values to enforce Λ^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0 and {circumflex over (Ω)}^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0, such that $\quad\left\{ \begin{matrix} {{{\Lambda^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a\left\lbrack {x\; B^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b\left\lbrack {x\; \Lambda^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \\ {{{{\overset{\_}{\Omega}\;}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a\left\lbrack {x\; {\overset{\_}{\Theta}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b\left\lbrack {x\; {\overset{\_}{\Omega}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \end{matrix} \right.$ and a′ and b′ are suitable values to enforce B^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0 and {circumflex over (Θ)}^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0, such that $\begin{matrix} \left\{ \begin{matrix} {{{B^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a^{\prime}\left\lbrack {x\; \Lambda^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b^{\prime}\left\lbrack {x\; B^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \\ {{{{\overset{\_}{\Theta}\;}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a^{\prime}\left\lbrack {x\; {\overset{\_}{\Omega}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b^{\prime}\left\lbrack {x\; {\overset{\_}{\Theta}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \end{matrix} \right. & \; \\ \begin{matrix} {L_{\Lambda} = {{L_{B}\bigwedge{\Lambda^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}} \neq {{0\bigwedge{B^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}}{{\overset{\_}{\Omega}}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}}}} \\ {= {{\Lambda^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}{{\overset{\_}{\Theta}}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}}} \end{matrix} & {{Case}\mspace{14mu} 8} \\ \left\{ \begin{matrix} \left. {\Lambda^{(\sigma_{i + 1})}(x)}\leftarrow{\left( {1 - {X_{i + 1}^{2}x^{2}}} \right){\Lambda^{(\sigma_{i})}(x)}} \right. \\ \left. {B^{(\sigma_{i + 1})}(x)}\leftarrow{{{\Lambda^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} \cdot {B^{(\sigma_{i})}(x)}} + {{B^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} \cdot {\Lambda^{(\sigma_{i})}(x)}}} \right. \\ \left. L_{\Lambda}\leftarrow{L_{\Lambda} + {2\mspace{31mu} L_{B}}}\leftarrow L_{B} \right. \end{matrix} \right. & \; \end{matrix}$
 15. A computer program product for incrementally generating an error locator polynomial, the computer program product being embodied in a computer readable storage medium and comprising computer instructions for: flipping a bit pattern Y_(i) at a symbol X_(i) an initial dataword to obtain a first test error pattern; and flipping a bit pattern Y_(j) at a symbol X_(j) within the first test error pattern to obtain a second test error pattern, wherein i≠j.
 16. The computer program product of claim 15 further comprising computer instructions for: flipping a bit pattern Y_(j) at a symbol X_(j) within the initial dataword to obtain a third test error pattern; and flipping a bit pattern Y_(k) at a symbol X_(k) within the third test error pattern to obtain a fourth test error pattern, wherein k≠i and k≠j.
 17. The computer program product of claim 16 further comprising computer instructions for flipping a bit pattern Y_(k) at a symbol X_(k) within the initial dataword to obtain a fifth test error pattern.
 18. The computer program product of claim 15 further comprising computer instructions for: performing soft-output Viterbi decoding to obtain a received dataword, r=[r_(n−1), r_(n−2), . . . , r₁, r₀], and a list of error events, (X₁,Y₁), (X₂,Y₂), . . . , (X_(r),Y_(r)), used in flipping to obtain the first test error pattern and the second test error pattern; performing error correction decoding using the received dataword and the list of error events; and determining whether the error correction decoding is successful, wherein using the processor to incrementally generate the error locator polynomial is skipped in the event the error correction decoding is successful.
 19. The computer program product of claim 15 further comprising computer instructions for: generating a plurality of test error patterns that includes the first test error pattern and the second test error pattern; and selecting one of the plurality of test error patterns.
 20. The computer program product of claim 19, wherein the computer instructions for selecting one of the plurality of test error patterns include computer instructions for: comparing a first minimum distance associated with the first test error pattern with a second minimum distance associated with the second test error pattern; determining whether to keep information associated with the first test error pattern or the second test error pattern based at least in part on the comparison of the first minimum distance and the second minimum distance; keeping an error locator polynomial and a scratch polynomial associated with the first test error pattern and discarding an error locator polynomial and a scratch polynomial associated with the second test error pattern in the event it is determined to keep information associated with the first test error pattern; and keeping the error locator polynomial and the scratch polynomial associated with the second test error pattern and discarding the error locator polynomial and the scratch polynomial associated with the first test error pattern in the event it is determined to keep information associated with the second test error pattern.
 21. The computer program product of claim 15 further comprising computer instructions for generating an error locator polynomial and a scratch polynomial using the following case statement: $\begin{matrix} {{\Lambda^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} = {{0\bigwedge{{\overset{\_}{\Omega}}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}} = 0}} & {{Case}\mspace{14mu} 1} \\ \left\{ \begin{matrix} \left. {\Lambda^{(\sigma_{i + 1})}(x)}\leftarrow{\Lambda^{(\sigma_{i})}(x)} \right. \\ \left. {B^{(\sigma_{i + 1})}(x)}\leftarrow{\left( {1 - {X_{i + 1}^{2}x^{2}}} \right){B^{(\sigma_{i})}(x)}} \right. \\ \left. L_{\Lambda}\leftarrow{L_{\Lambda}\mspace{31mu} L_{B}}\leftarrow{L_{B} + 2} \right. \end{matrix} \right. & \; \\ {{B^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} = {{0\bigwedge{{\overset{\_}{\Theta}}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}} = 0}} & {{Case}\mspace{14mu} 2} \\ \left\{ \begin{matrix} \left. {\Lambda^{(\sigma_{i + 1})}(x)}\leftarrow{\left( {1 - {X_{i + 1}^{2}x^{2}}} \right){\Lambda^{(\sigma_{i})}(x)}} \right. \\ \left. {B^{(\sigma_{i + 1})}(x)}\leftarrow{B^{(\sigma_{i})}(x)} \right. \\ \left. L_{\Lambda}\leftarrow{L_{\Lambda} + {2\mspace{31mu} L_{B}}}\leftarrow L_{B} \right. \end{matrix} \right. & \; \\ {L_{\Lambda} < {L_{B}\bigwedge{\Lambda^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}} \neq 0} & {{Case}\mspace{14mu} 3} \\ \left\{ \begin{matrix} \left. {\Lambda^{(\sigma_{i + 1})}(x)}\leftarrow{\left( {1 - {X_{i + 1}^{2}x^{2}}} \right){\Lambda^{(\sigma_{i})}(x)}} \right. \\ \left. {B^{(\sigma_{i + 1})}(x)}\leftarrow{{B^{(\sigma_{i})}(x)} + {{ax}\; {\Lambda^{(\sigma_{i})}(x)}} + {{bx}^{2}{\Lambda^{(\sigma_{i})}(x)}}} \right. \\ \left. L_{\Lambda}\leftarrow{L_{\Lambda} + {2\mspace{31mu} L_{B}}}\leftarrow L_{B} \right. \end{matrix} \right. & \; \end{matrix}$ where a and b are suitable values to enforce B^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0 and {circumflex over (Θ)}^((σ) ^(i+) ⁾(X_(i+1) ⁻¹)=0, such that $\begin{matrix} \left\{ \begin{matrix} {{{B^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a\left\lbrack {x\; \Lambda^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b\left\lbrack {x^{2}\Lambda^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \\ {{{{\overset{\_}{\Theta}\;}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a\left\lbrack {x\; {\overset{\_}{\Omega}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b\left\lbrack {x^{2}{\overset{\_}{\Omega}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \end{matrix} \right. & \; \\ {L_{\Lambda} > {L_{B}\bigwedge{B^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}} \neq 0} & {{Case}\mspace{14mu} 4} \\ \left\{ \begin{matrix} \left. {\Lambda^{(\sigma_{i + 1})}(x)}\leftarrow{{\Lambda^{(\sigma_{i})}(x)} + {{ax}\; {B^{(\sigma_{i})}(x)}} + {{bx}^{2}{B^{(\sigma_{i})}(x)}}} \right. \\ \left. {B^{(\sigma_{i + 1})}(x)}\leftarrow{\left( {1 - {X_{i + 1}^{2}x^{2}}} \right){B^{(\sigma_{i})}(x)}} \right. \\ \left. L_{\Lambda}\leftarrow{L_{\Lambda}\mspace{31mu} L_{B}}\leftarrow{L_{B} + 2} \right. \end{matrix} \right. & \; \end{matrix}$ where a and b are suitable values to enforce Λ^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0 and {circumflex over (Ω)}^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0, such that $\begin{matrix} \left\{ \begin{matrix} {{{\Lambda^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a\left\lbrack {x\; B^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b\left\lbrack {x^{2}B^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \\ {{{{\overset{\_}{\Omega}\;}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a\left\lbrack {x\; {\overset{\_}{\Theta}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b\left\lbrack {x^{2}{\overset{\_}{\Theta}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \end{matrix} \right. & \; \\ {{L_{\Lambda} < {L_{B}\bigwedge{\Lambda^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}}} = {{0\bigwedge{{\overset{\_}{\Omega}}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}} \neq 0}} & {{Case}\mspace{14mu} 5} \\ \left\{ \begin{matrix} \left. {\Lambda^{(\sigma_{i + 1})}(x)}\leftarrow{\left( {1 - {X_{i + 1}^{2}x}} \right){\Lambda^{(\sigma_{i})}(x)}} \right. \\ \left. {B^{(\sigma_{i + 1})}(x)}\leftarrow{{B^{(\sigma_{i})}(x)} + {{ax}\; {\Lambda^{(\sigma_{i})}(x)}} + {{bx}\; {B^{(\sigma_{i})}(x)}}} \right. \\ \left. L_{\Lambda}\leftarrow{L_{\Lambda} + {1\mspace{25mu} L_{B}}}\leftarrow{L_{B} + 1} \right. \end{matrix} \right. & \; \end{matrix}$ where a and b are suitable values to enforce Λ^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0 and {circumflex over (Θ)}^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0, such that $\begin{matrix} \left\{ \begin{matrix} {{{B^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a\left\lbrack {x\; \Lambda^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b\left\lbrack {x^{2}B^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \\ {{{{\overset{\_}{\Theta}\;}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a\left\lbrack {x\; {\overset{\_}{\Omega}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b\left\lbrack {x^{2}{\overset{\_}{\Theta}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \end{matrix} \right. & \; \\ {{L_{\Lambda} < {L_{B}\bigwedge{B^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}}} = {{0\bigwedge{{\overset{\_}{\Theta}}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}} \neq 0}} & {{Case}\mspace{14mu} 6} \\ \left\{ \begin{matrix} \left. {\Lambda^{(\sigma_{i + 1})}(x)}\leftarrow{{\Lambda^{(\sigma_{i})}(x)} + {{ax}\; {B^{(\sigma_{i})}(x)}} + {{bx}\; {\Lambda^{(\sigma_{i})}(x)}}} \right. \\ \left. {B^{(\sigma_{i + 1})}(x)}\leftarrow{\left( {1 - {X_{i + 1}x}} \right){B^{(\sigma_{i})}(x)}} \right. \\ \left. L_{\Lambda}\leftarrow{L_{\Lambda} + {1\mspace{25mu} L_{B}}}\leftarrow{L_{B} + 1} \right. \end{matrix} \right. & \; \end{matrix}$ where a and b are suitable values to enforce Λ^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0 and {circumflex over (Ω)}^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0, such that $\begin{matrix} \left\{ \begin{matrix} {{{\Lambda^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a\left\lbrack {x\; B^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b\left\lbrack {x\; \Lambda^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \\ {{{{\overset{\_}{\Omega}\;}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a\left\lbrack {x\; {\overset{\_}{\Theta}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b\left\lbrack {x\; {\overset{\_}{\Omega}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \end{matrix} \right. & \; \\ {L_{\Lambda} = {{{L_{B}\bigwedge{B^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}}{{\overset{\_}{\Omega}}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}} \neq {{\Lambda^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}{{\overset{\_}{\Theta}}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}}}} & {{Case}\mspace{14mu} 7} \\ \left\{ \begin{matrix} \left. {\Lambda^{(\sigma_{i + 1})}(x)}\leftarrow{{\Lambda^{(\sigma_{i})}(x)} + {{ax}\; {V^{(\sigma_{i})}(x)}} + {{bx}\; {\Lambda^{(\sigma_{i})}(x)}}} \right. \\ \left. {B^{(\sigma_{i + 1})}(x)}\leftarrow{{B^{(\sigma_{i})}(x)} + {a^{\prime}x\; {\Lambda^{(\sigma_{i})}(x)}} + {b^{\prime}x\; {B^{(\sigma_{i})}(x)}}} \right. \\ \left. L_{\Lambda}\leftarrow{L_{\Lambda} + {1\mspace{31mu} L_{B}}}\leftarrow{L_{B} + 1} \right. \end{matrix} \right. & \; \end{matrix}$ where a and b are suitable values to enforce Λ^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0 and {circumflex over (Ω)}^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0, such that $\quad\left\{ \begin{matrix} {{{\Lambda^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a\left\lbrack {x\; B^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b\left\lbrack {x\; \Lambda^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \\ {{{{\overset{\_}{\Omega}\;}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a\left\lbrack {x\; {\overset{\_}{\Theta}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b\left\lbrack {x\; {\overset{\_}{\Omega}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \end{matrix} \right.$ and a′ and b′ are suitable values to enforce B^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0 and {circumflex over (Θ)}^((σ) ^(i+1) ⁾(X_(i+1) ⁻¹)=0, such that $\begin{matrix} \left\{ \begin{matrix} {{{B^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a^{\prime}\left\lbrack {x\; \Lambda^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b^{\prime}\left\lbrack {x\; B^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \\ {{{{\overset{\_}{\Theta}\;}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} + {{a^{\prime}\left\lbrack {x\; {\overset{\_}{\Omega}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)} + {{b^{\prime}\left\lbrack {x\; {\overset{\_}{\Theta}}^{(\sigma_{i})}} \right\rbrack}\left( X_{i + 1}^{- 1} \right)}} = 0} \end{matrix} \right. & \; \\ \begin{matrix} {L_{\Lambda} = {{L_{B}\bigwedge{\Lambda^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}} \neq {{0\bigwedge{B^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}}{{\overset{\_}{\Omega}}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}}}} \\ {= {{\Lambda^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}{{\overset{\_}{\Theta}}^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)}}} \end{matrix} & {{Case}\mspace{14mu} 8} \\ \left\{ \begin{matrix} \left. {\Lambda^{(\sigma_{i + 1})}(x)}\leftarrow{\left( {1 - {X_{i + 1}^{2}x^{2}}} \right){\Lambda^{(\sigma_{i})}(x)}} \right. \\ \left. {B^{(\sigma_{i + 1})}(x)}\leftarrow{{{\Lambda^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} \cdot {B^{(\sigma_{i})}(x)}} + {{B^{(\sigma_{i})}\left( X_{i + 1}^{- 1} \right)} \cdot {\Lambda^{(\sigma_{i})}(x)}}} \right. \\ \left. L_{\Lambda}\leftarrow{L_{\Lambda} + {2\mspace{31mu} L_{B}}}\leftarrow L_{B} \right. \end{matrix} \right. & \; \end{matrix}$ 